package mainClient;

import interaction.IRmiServer;

import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RmiClient extends DefaultClient
{
  private String m_ip;
  private int m_port;  
  private boolean m_isConnected = false;
  private Registry m_registry;
  private IRmiServer m_server;
  
  public RmiClient(int port, String ip, int selfPort)
  {
    m_port = port;
    m_ip = ip;
  }
  
  @Override
  public boolean connect()
  {
    if(m_isConnected == true)
    {
      System.out.println("Повторная попытка подлючения");
      return true;
    }
    
    try
    {
      m_registry = LocateRegistry.getRegistry(m_ip, m_port);
    }
    catch (RemoteException e)
    {
    	System.out.println("Не удалось найти реестр объектов");
      return false;
    }
    
    try
    {
      m_server = (IRmiServer)(m_registry.lookup("SpaceServer"));
    }
    catch (AccessException e)
    {
    	System.out.println("Нет прав использования удалённых объектов");
      return false;
    }
    catch (RemoteException e)
    {
      System.out.println("Не удалось найти объект");
      return false;
    }
    catch (NotBoundException e)
    {
      System.out.println("Объект не существует на сервере");
      return false;
    }
    
    try
    {
      m_id = m_server.connect();
    }
    catch (RemoteException e)
    {
      System.out.println("Ошибка вызова метода соединения");
      return false;
    }
    
    m_isConnected = true;    
    
    return true;
  }

  @Override
  public boolean disconnect()
  { 
    if(m_isConnected == false)
    {
      System.out.println("Попытка повторного отключения");
      return true;
    }
    
    try
    {
      m_server.disconnect(m_id);
    }
    catch (RemoteException e)
    {
      System.out.println("Ошибка вызова метода разъединения");
      return false;
    }
    
    return true;
  }

@Override
public String SendBDR() {
	return null;
	// TODO Auto-generated method stub
	
}

  
}
